import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

// 通过这个代码,向数据库表中插入一行记录
public class Demo {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号");
        int id = scanner.nextInt();
        System.out.println("请输入姓名");
        String name = scanner.next();

        // 1. 先创建DataSource
        // 向上转型
        DataSource dataSource = new MysqlDataSource();
        // 设置网址
        // 找到服务器的位置
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        // 设置用户名和密码
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        // 2. 建立和数据库服务器之间的连接,连接好之后可以进行后续的 请求-响应 交互
        Connection connection = dataSource.getConnection();

        // 3. 构造sql, 代码中的sql是不需要写 ; 的
        // String sql = "insert into student values(1,'张三')";
       // String sql = "delete from student where id = 1";
        // String sql = "update student set name = '王五' where id = 1";
       // String sql = "insert into student values("+ id + ",'"+ name + "')";
        // ? 为占位符
        String sql = "insert into student values(?,?)";

        // 在客户端进行检查sql的语法错误,检查完毕之后再传给数据库
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println("sql + " + statement);

        // 4. 把sql发给服务器,返回值为n为影响到的行数
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        // 5. 释放资源,关闭连接,释放顺序,是后获取到的资源先释放
        statement.close();
        connection.close();
    }
}
